#define _CRT_SECURE_NO_WARNINGS

//Problem 1:
/**
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     ListNode *next;
*     ListNode(int x) : val(x), next(NULL) {}
* };
*/
//class Solution {
//public:
//	bool hasCycle(ListNode *head) {
//		ListNode* fast = head;
//		ListNode* slow = head;
//
//		while (fast && fast->next)
//		{
//			fast = fast->next->next;
//			slow = slow->next;
//			if (fast == slow)
//			{
//				return true;
//			}
//		}
//		return false;
//	}
//};

//Problem 2:
/**
* Definition for singly-linked list.
* class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) {
*         val = x;
*         next = null;
*     }
* }
*/
//public class Solution {
//	public ListNode detectCycle(ListNode head) {
//		ListNode fast = head, slow = head;
//		while (true) {
//			if (fast == null || fast.next == null) return null;
//			fast = fast.next.next;
//			slow = slow.next;
//			if (fast == slow) break;
//		}
//		fast = head;
//		while (slow != fast) {
//			slow = slow.next;
//			fast = fast.next;
//		}
//		return fast;
//	}
//}